<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Promise</title>
</head>
<body>

<script src="ajax.js"></script>
<script>
    // Promise 承诺 表示未来的某个时间一定会返回一个承诺的结果给你

    // Promise 是处理异步回调的解决方案
    // Promise 对象是一个容器,里面包裹了一个(些)异步操作,它表示一个预计会在未来完成的异步操作
    // Promise 有三种状态[PromiseState]: pending(进行中) fulfilled(已成功) rejected(已失败)
    // Promise 有一个参数是一个回调函数,这个回调函数有两个参数:这两个回调函数只要没有调用就一直是pending
    //      resolve(成功后的回调函数) reject(失败后的回调函数)
    // Promise 状态只有两种可能: pending=>fulfilled  pending=>rejected;
    // promise 状态一旦发生改变就会凝固,会一直保持这个状态,不会再发生变化
    // promise状态一旦发生改变就会触发promise的then方法,then方法中有两个默认回调函数,一个是成功后的回调resolve,一个是失败后的回调reject
    //promise错误捕获 catch
    //在创建/使用promise的时候,如果代码报错,那么会自动的走then.reject回调函数,如果在then中没有写reject回调,会在catch中进行错误捕获,catch也可以捕获then方法中的报错
    //promise finally=>无论promise执行成功或者失败,也无所谓catch方法是否执行,finally方法都会执行


    //一旦promise创建成功就立即执行(在new Promise(同步)
    {
        // let p1 = new Promise((resolve, reject) => {
        //     resolve();//成功后的回调函数
        //     // reject();//失败后的回调函数
        //     console.log(1)
        // })
        // p1.then(//异步
        //     resolve => {
        //         console.log(2)
        //         console.log("成功后的回调")
        //     },
        //     reject => {
        //         console.log("失败后的回调")
        //     }
        // )
        // console.log(3)
        // console.log(p1)

        //132 宏任务、微任务
    }

    //promise错误捕获 catch
    //在创建/使用promise的时候,如果代码报错,那么会自动的走then.reject回调函数,如果在then中没有写reject回调,会在catch中进行错误捕获,catch也可以捕获then方法中的报错
    {
        // let p1 = function (num) {
        //     return new Promise((resolve, reject) => {
        //         if (num >= 1) {
        //             resolve(num);//成功后的回调函数
        //         } else {
        //             reject(num);//失败后的回调函数
        //         }
        //     })
        // }
        // //catch也可以捕获then方法中的报错
        // p1(1).then(//异步
        //     resolve => {
        //         throw new Error("手动报错")
        //         console.log("成功后的回调",resolve)
        //     },
        //     reject => {
        //         console.log("失败后的回调",reject)
        //     }
        // ).catch(
        //     err=>{
        //         console.log("catch==>",err)
        //     }
        // )
    }

    //promise finally=>无论promise执行成功或者失败,也无所谓catch方法是否执行,finally方法都会执行
    {
        let p1 = function (num) {
            return new Promise((resolve, reject) => {
                if (num >= 1) {
                    resolve(num);//成功后的回调函数
                } else {
                    reject(num);//失败后的回调函数
                }
            })
        }
        p1(1).then(//异步
            resolve => {
                // throw new Error("手动报错")
                console.log("成功后的回调",resolve)
            },
            reject => {
                console.log("失败后的回调",reject)
            }
        ).catch(
            err=>{
                console.log("catch==>",err)
            }
        ).finally(
            (fin)=>{
                console.log("finally===>",fin)
            }
        )
    }



    // {
    //     let xhr = new XMLHttpRequest();
    //     xhr.open("get","../a.json",false);
    //     xhr.onreadystatechange = function (){
    //         console.log(xhr.responseText)
    //     };
    //     xhr.send()
    //     $.ajax({
    //         url:"../a.json",
    //         success(res){
    //             console.log(res)
    //         }
    //     })
    // }

</script>
</body>
</html>